home *** CD-ROM | disk | FTP | other *** search
/ The 640 MEG Shareware Studio 5 / The 640 Meg Shareware Studio CD-ROM Volume V (Data Express)(1994).ISO / amiga / tempdemo.lha / ProgrammersInfo / DSKEL-WHOd.c < prev    next >
C/C++ Source or Header  |  1994-05-22  |  10KB  |  388 lines

  1. /*
  2.  
  3. [DSKEL-WHO v_._] Who [Deluxe]                        By The Skeleton [__-__-__]
  4. |~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|
  5. | # | LOGON | HANDLE               | ACTiViTY           | FiLENAME       SiZE |
  6. |===|=======|======================|====================|=====================|
  7. | 1 | 19:44 | The Skeleton         | Downloading        | NewFile.dms 1358868 |
  8. |---|-------|----------------------|--------------------|---------------------|
  9. | 2 | 19:44 | The Skeleton         | Uploading          | NewFile.dms  358868 |
  10. |---|-------|----------------------|--------------------|---------------------|
  11. | 3 |   :   | Awaiting a call      |                    |                     |
  12. |---|-------|----------------------|--------------------|---------------------|
  13. | 4 |   :   | Awaiting a call      |                    |                     |
  14. |---|-------|----------------------|--------------------|---------------------|
  15. | 5 |   :   | Awaiting a call      |                    |                     |
  16. `-----------------------------------------------------------------------------'
  17.  
  18. */
  19. //**********************
  20. //*****  Includes  *****
  21. //**********************
  22.  
  23. #include <proto/all.h>
  24. #include <stdio.h>
  25. #include <exec/memory.h>
  26.  
  27. #include <string.h>
  28. #include <tempest/headers.h>
  29.  
  30. //********************************
  31. //*****  Structures/Defines  *****
  32. //********************************
  33.  
  34.  
  35. struct MyMessage
  36.  {
  37.   struct Message Msg;
  38.   struct User User;
  39.   char text[255],
  40.        text1[255];
  41.   int car,Value,Data;
  42.   long LongValue;
  43.   int  IntValue;
  44.  };
  45.  
  46. struct User User;
  47. struct MsgPort *MyPort = NULL;
  48. struct MyMessage *msg;
  49. struct Down_Load Down_Load;
  50. struct DownLoad_Status DownLoad_Status;
  51.  
  52. struct node_info nody;
  53.  
  54. void CloseStuff();
  55. void pl(char outstring[]);
  56. void RIPIT(char *,char *);
  57. int DOORIO();
  58. int Loadnody(int node);
  59. //******************************
  60. //*****  Global Variables  *****
  61. //******************************
  62.  
  63. int  EXIT_FLAG, DOOR_DATA, DOOR_CAR, DOOR_VALUE, DOOR_VALUE1 = 0,
  64.      Result,Error,first = 0;
  65. char MyName[255],st[100],DOOR_MSG[255],DOOR_MSG1[255];
  66.  
  67. //******************
  68. //*****  Main  *****
  69. //******************
  70.  
  71. void main(int argc,char *argv[])
  72. {
  73.  struct FileInfoBlock *FBlock;
  74.  struct FileLock *FLock;
  75.  char string[255],string2[255];
  76.  char Handle[40],Location[40],Activity[30],Time[15],Filename[15],Filesize[15];
  77.  int  file,Position,stat,count=0,NODES,NODE;
  78.  register i;
  79.  
  80.  if(!DoorStart(argv[1])) { PutStr("[os2] Tempest Door\n"); exit(0); }
  81.  
  82.  if(!User.NFlags1 & NF1_ViewNodeLists) CloseStuff();
  83.  
  84. //********************************
  85. //*****  Load Internal.Data  *****
  86. //********************************
  87.  
  88.  NODE = atoi(argv[1]);
  89.  stat=Loadnody(NODE);
  90.  if(stat==0)
  91.   {
  92.    pl("NodeInfo File Not Found!\r\n");
  93.    CloseStuff();
  94.   }
  95.  NODES = nody.SystemDataInfo->NumberOfLines + 1;
  96.  
  97.  pl("\f.-----------------------------------------------------------------------------.\r\n");
  98.  pl("| LoGoN HANDLE              ACTiViTY           FiLENAME        SiZE |\r\n");
  99.  
  100.  i=1;
  101.  do
  102.   {
  103.    if(CTRLC())
  104.     {
  105.      pl("Aborting Who Display!\r\n");
  106.      CloseStuff();
  107.     }
  108.    stat=Loadnody(i);
  109.    if(stat==0) setmem(&nody,sizeof(struct node_info),NULL);
  110.    strcpy(Filename," ");
  111.    strcpy(Filesize," ");
  112.  
  113.    //***********************
  114.    //*****  Uploading  *****
  115.    //***********************
  116.    if(*nody.AN== 58) // Only If they are uploading!
  117.     {
  118.      sprintf(string,"%s",nody.NodeDataInfo->TempULWorkPath);
  119.      if((FLock =(struct FileLock *)Lock(string,ACCESS_READ))==NULL) CloseStuff();
  120.      if((FBlock=(struct FileInfoBlock *)AllocMem((long)sizeof(struct FileInfoBlock),MEMF_CHIP)) == NULL)
  121.       {
  122.        UnLock((BPTR)FLock);
  123.        CloseStuff();
  124.       }
  125.      Examine((BPTR)FLock,FBlock);
  126.      while ((ExNext((BPTR)FLock,FBlock))!=0)
  127.       {
  128.        if((FBlock->fib_DirEntryType) <0)
  129.         {
  130.          strcpy(Filename,FBlock->fib_FileName);
  131.          sprintf(Filesize,"%ld",FBlock->fib_Size);
  132.          break;
  133.         }
  134.       }
  135.      UnLock((BPTR)FLock);
  136.      FreeMem(FBlock,sizeof(struct FileInfoBlock));
  137.     }
  138.  
  139.    //********************************
  140.    //*****  Downloading Checks  *****
  141.    //********************************
  142.  
  143.    if(*nody.AN==18) // Only If they are Downloading!
  144.     {
  145.      sprintf(string, "NODE:Download_File_List_Node#%d",i);
  146.      sprintf(string2,"NODE:Download_File_Status_Node#%d",i);
  147.      file=Open(string2,MODE_OLDFILE);
  148.      if(file==0)
  149.       {
  150.        file=Open(string,MODE_OLDFILE);   // Single Downloading
  151.        if(file!=0) Read(file,(char *)&Down_Load, sizeof(struct Down_Load));
  152.       }
  153.      else
  154.       {
  155.        do
  156.         {
  157.          count++;
  158.          stat=Read(file,(char *)&DownLoad_Status, sizeof(struct DownLoad_Status));
  159.         }
  160.        while(stat > 0);
  161.        Close(file);
  162.        file=Open(string,MODE_OLDFILE);
  163.        count--;
  164.        Position=sizeof(struct Down_Load) * count;
  165.        Seek(file,Position,OFFSET_BEGINNING);
  166.        Read(file,(char *)&Down_Load, sizeof(struct Down_Load));
  167.       }
  168.      Close(file);
  169.      strcpy(string,Down_Load.File);
  170.      RIPIT(string,string2);
  171.      strcpy(Filename,string2);
  172.      sprintf(Filesize,"%ld",Down_Load.Bytes);
  173.      count=0;
  174.     }
  175.  
  176.    //**************************
  177.    //*****  Final Output  *****
  178.    //**************************
  179.  
  180.    strcpy(Handle,nody.UserInfo->Name);
  181.    if((*nody.hide==1)&&(User.Security!=255)&&(User.Name[0]!=NULL))
  182.     {
  183.      if(nody.UserInfo->Slot_Number==1) Handle[0]=NULL;
  184.      else strcpy(Handle,"[ Hiding From Display ]");
  185.      strcpy(Location," ");
  186.      strcpy(Filename," ");
  187.     }
  188.    if(Handle[0]!=NULL)
  189.     {
  190.      sprintf(string,"%s",ctime(&nody.UserInfo->Time_Last_Connect));
  191.      strmid(string,Time,12,5);
  192.      strcpy(Location,nody.UserInfo->City);
  193.      strcpy(Activity,nody.activity);
  194.      pl("|---|-------|---------------------|--------------------|----------------------|\r\n");
  195.      if(nody.NodeDataInfo->LocalMode==0) sprintf(string2,"%2d",i);
  196.      else                                strcpy(string2," V");
  197.      sprintf(string,"|%2s %5s %-20.20s%-19s%-12.12s %7s |\r\n",
  198.              string2,Time,Handle,Activity,Filename,Filesize);
  199.      pl(string);
  200.     }
  201.    i++;
  202.   }
  203.  while(i<NODES);
  204.  pl("`-----------------------------------------------------------------------------'\r\n\r\n");
  205.  CloseStuff();
  206. }
  207.  
  208.  
  209.  
  210.  
  211. //************************
  212. //*****  Load Nody  ******
  213. //************************
  214.  
  215. int Loadnody(int node)
  216. {
  217.  char string[50];
  218.  register int y;
  219.  int file;
  220.  sprintf(string,"Node:NodeInfo_%d",node);
  221.  for(y=1;y<3;y++)
  222.   {
  223.    file=Open(string,MODE_OLDFILE);
  224.    if(file!=0)
  225.     {
  226.      Read(file,(char *)&nody,sizeof(struct node_info));
  227.      Close(file);
  228.      return(1);
  229.     }
  230.   }
  231.  return(0);
  232. }
  233.  
  234.  
  235.  
  236.  
  237.  
  238. //*******************
  239. //*****  Ripit  *****
  240. //*******************
  241.  
  242. void RIPIT(char path[100],char fname[100])
  243. {
  244.  int x,y,len;
  245.  char string[255],string1[255],string3[255],string4[255];
  246. /* to get the reverse read of the file name */
  247.  len=strlen(path);
  248.  x=len-1;
  249.  y=0;
  250.  while(x>=0)
  251.   {
  252.    if(path[x]==':' || path[x]=='/') goto got;
  253.    string[y] = path[x];
  254.    x--;
  255.    y++;
  256.   }
  257.  if(y==0) return;     /* Unknown (0)? */
  258.  got:
  259.  string[y]='\0';
  260.  /* reverse read to finish the line to get the path */
  261.  y=0;
  262.  while(x>=0)
  263.   {
  264.    string3[y] = path[x];
  265.    x--;
  266.    y++;
  267.   }
  268.  string3[y]='\0';
  269.  /* flip the path around */
  270.  len=strlen(string3);
  271.  x=len-1;
  272.  y=0;
  273.  while(x>=0)
  274.   {
  275.    string4[y] = string3[x];
  276.    x--;
  277.    y++;
  278.   }
  279.  string4[y]='\0';
  280.  len=strlen(string);
  281.  /* flip the filename around */
  282.  x=len-1;
  283.  y=0;
  284.  while(x>=0)
  285.   {
  286.    string1[y] = string[x];
  287.    x--;
  288.    y++;
  289.   }
  290.  string1[y]='\0';
  291.  strcpy(fname,string1);
  292.  strcpy(path,string4);
  293. }
  294.  
  295.  
  296.  
  297. //*************************
  298. //*****  Close Stuff  *****
  299. //*************************
  300.  
  301. void CloseStuff()
  302. { DOOR_DATA=99; strcpy(DOOR_MSG,'\0'); DOORIO();
  303.  while(msg=(struct MyMessage *)GetMsg(MyPort)) ReplyMsg((struct Message *)msg);
  304.  if(MyPort) DeletePort(MyPort);
  305.  exit(0); }
  306.  
  307. //********************
  308. //*****  DoorIO  *****
  309. //********************
  310.  
  311. int DOORIO()
  312. {
  313.  struct MsgPort *HisPort;
  314.  struct MyMessage message;
  315.  int UPDATE;
  316.  if(EXIT_FLAG) return 0;
  317.  UPDATE=0;
  318.  HisPort = FindPort(st);
  319.  if(HisPort!=NULL)
  320.   {
  321.    message.Msg.mn_Node.ln_Type = NT_MESSAGE;
  322.    message.Msg.mn_Length = sizeof(message);
  323.    message.Msg.mn_ReplyPort = MyPort;
  324.    if(first)CopyMem(&User,&message.User,sizeof(struct User));
  325.    message.car   = 0;
  326.    message.Data  = DOOR_DATA;
  327.    message.Value = DOOR_VALUE;
  328.    message.IntValue = DOOR_VALUE1;
  329.    strcpy(message.text,DOOR_MSG);
  330.    strcpy(message.text1,DOOR_MSG1);
  331.    PutMsg((struct MsgPort *)HisPort,(struct Message *)&message);
  332.    Wait(1 << MyPort->mp_SigBit);
  333.    GetMsg(MyPort);
  334.    DOOR_DATA  = message.Data;
  335.    DOOR_VALUE = message.Value;
  336.    DOOR_VALUE1 = message.IntValue;
  337.    strcpy(DOOR_MSG,message.text);
  338.    strcpy(DOOR_MSG1,message.text1);
  339.    CopyMem(&message.User,&User,sizeof(struct User));
  340.    first=1;
  341.    UPDATE=0;
  342.    if(message.car) EXIT_FLAG=1;
  343.   }
  344.  return 0;
  345. }
  346.  
  347. //************************
  348. //*****  Door Start  *****
  349. //************************
  350.  
  351. DoorStart(char node[])
  352. {
  353.  struct MsgPort *HisPort;
  354.  EXIT_FLAG = 0;
  355.  sprintf(st,"%s:TEMPEST_DOOR",node);
  356.  HisPort = FindPort(st);
  357.  if(HisPort==NULL) return (FALSE);
  358.  sprintf(MyName,"%s:DOOR_PORT",node);
  359.  MyPort = CreatePort(MyName,0L);
  360.  if(MyPort==NULL)
  361.   {
  362.    PutStr("Cant open port");
  363.    return(int)FALSE;
  364.   }
  365.  DOORIO();
  366.  return (int)TRUE;
  367. }
  368.  
  369. //*****************************
  370. //*****  PL (Print Line)  *****
  371. //*****************************
  372.  
  373. void pl(char outstring[])
  374. { DOOR_DATA=1; strcpy(DOOR_MSG,outstring); DOORIO(); }
  375.  
  376.  
  377. //*************************
  378. //*****  CTRLC CHECK  *****
  379. //*************************
  380.  
  381. int CTRLC(void)
  382.  {
  383.   DOOR_DATA=73;
  384.   DOORIO();
  385.   return(DOOR_VALUE);
  386.  }
  387.  
  388.